home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 25 / Mac Magazin and MacEasy Magazine CD - Issue 25.iso / Grafik & Text / BibTeX / BibTeX inputs / meth-info-med.bst < prev    next >
Text File  |  1996-02-11  |  20KB  |  1,135 lines

  1. % Modified for Methods of Information in Medicine
  2. % Michael G. Kahn
  3. % kahn@wucs1.WUSTL.EDU
  4. % Sept 1989
  5. %
  6. % BibTeX standard bibliography style `plain'
  7.     % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
  8.     % Copyright (C) 1985, all rights reserved.
  9.     % Copying of this file is authorized only if either
  10.     % (1) you make absolutely no changes to your copy, including name, or
  11.     % (2) if you do make changes, you name it something other than
  12.     % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
  13.     % This restriction helps ensure that all standard styles are identical.
  14.     % The file btxbst.doc has the documentation for this style.
  15.  %
  16.  %
  17.  % MGK Changes: 
  18.  %          Issue numbers not written in @article
  19.  %          Thesis title not italisized
  20.  %          Capitalized "Chapter" in @inbook, "Editor" in
  21.  %                     @inproceedings,@incollection
  22.  %          Organization field used for department information in
  23.  %                     tech report, masters/phd thesis
  24.  %          Address changed to output.check in @book, @inbook, @inproceedings
  25.  %                     @proceedings, @techreport, @masterthesis, @phdthesis
  26.  %                     to output warning message if missing.
  27.  %          Edition, if present, immediately follows title, comma, edition, period.
  28.  %
  29.  
  30. ENTRY
  31.   { address
  32.     author
  33.     booktitle
  34.     chapter
  35.     edition
  36.     editor
  37.     howpublished
  38.     institution
  39.     journal
  40.     key
  41.     month
  42.     note
  43.     number
  44.     organization
  45.     pages
  46.     publisher
  47.     school
  48.     series
  49.     title
  50.     type
  51.     volume
  52.     year
  53.   }
  54.   {}
  55.   { label }
  56.  
  57. INTEGERS { output.state before.all mid.sentence after.sentence after.block mid.sentence.space}
  58.  
  59. FUNCTION {init.state.consts}
  60. { #0 'before.all :=
  61.   #1 'mid.sentence :=
  62.   #2 'after.sentence :=
  63.   #3 'after.block :=
  64.   #4 'mid.sentence.space :=
  65. }
  66.  
  67. STRINGS { s t }
  68.  
  69. FUNCTION {output.nonnull}
  70. { 's :=
  71.   output.state mid.sentence =
  72.     { ", " * write$ }
  73.     { output.state mid.sentence.space =
  74.       {" " * write$ }
  75.       { output.state after.block =
  76.     { add.period$ write$
  77.       newline$
  78.       "\newblock " write$
  79.     }
  80.     { output.state before.all =
  81.         'write$
  82.         { add.period$ " " * write$ }
  83.       if$
  84.     }
  85.    if$
  86.    }
  87.       if$
  88.       mid.sentence 'output.state :=
  89.     }
  90.   if$
  91.   s
  92. }
  93.  
  94. FUNCTION {output}
  95. { duplicate$ empty$
  96.     'pop$
  97.     'output.nonnull
  98.   if$
  99. }
  100.  
  101. FUNCTION {output.check}
  102. { 't :=
  103.   duplicate$ empty$
  104.     { pop$ "empty " t * " in " * cite$ * warning$ }
  105.     'output.nonnull
  106.   if$
  107. }
  108.  
  109. FUNCTION {output.bibitem}
  110. { newline$
  111.   "\bibitem{" write$
  112.   cite$ write$
  113.   "}" write$
  114.   newline$
  115.   ""
  116.   before.all 'output.state :=
  117. }
  118.  
  119. FUNCTION {fin.entry}
  120. { add.period$
  121.   write$
  122.   newline$
  123. }
  124.  
  125. FUNCTION {new.block}
  126. { output.state before.all =
  127.     'skip$
  128.     { after.block 'output.state := }
  129.   if$
  130. }
  131.  
  132. FUNCTION {new.sentence}
  133. { output.state after.block =
  134.     'skip$
  135.     { output.state before.all =
  136.     'skip$
  137.     { after.sentence 'output.state := }
  138.       if$
  139.     }
  140.   if$
  141. }
  142.  
  143. FUNCTION {new.section}
  144. { output.state after.block =
  145.     'skip$
  146.     { output.state before.all =
  147.     'skip$
  148.     { mid.sentence.space 'output.state := }
  149.       if$
  150.     }
  151.   if$
  152. }
  153.  
  154.  
  155. FUNCTION {not}
  156. {   { #0 }
  157.     { #1 }
  158.   if$
  159. }
  160.  
  161. FUNCTION {and}
  162. {   'skip$
  163.     { pop$ #0 }
  164.   if$
  165. }
  166.  
  167. FUNCTION {or}
  168. {   { pop$ #1 }
  169.     'skip$
  170.   if$
  171. }
  172.  
  173. FUNCTION {new.block.checka}
  174. { empty$
  175.     'skip$
  176.     'new.block
  177.   if$
  178. }
  179.  
  180. FUNCTION {new.block.checkb}
  181. { empty$
  182.   swap$ empty$
  183.   and
  184.     'skip$
  185.     'new.block
  186.   if$
  187. }
  188.  
  189. FUNCTION {new.sentence.checka}
  190. { empty$
  191.     'skip$
  192.     'new.sentence
  193.   if$
  194. }
  195.  
  196. FUNCTION {new.sentence.checkb}
  197. { empty$
  198.   swap$ empty$
  199.   and
  200.     'skip$
  201.     'new.sentence
  202.   if$
  203. }
  204.  
  205. FUNCTION {field.or.null}
  206. { duplicate$ empty$
  207.     { pop$ "" }
  208.     'skip$
  209.   if$
  210. }
  211.  
  212. FUNCTION {emphasize}
  213. { duplicate$ empty$
  214.     { pop$ "" }
  215.     { "{\em " swap$ * "\/}" * }
  216.   if$
  217. }
  218.  
  219. INTEGERS { nameptr namesleft numnames }
  220.  
  221. FUNCTION {format.names}
  222. { 's :=
  223.   #1 'nameptr :=
  224.   s num.names$ 'numnames :=
  225.   numnames 'namesleft :=
  226.     { namesleft #0 > }
  227.     { s nameptr "{vv~}{ll}{, jj}{ f{}}" format.name$ 't :=
  228.       nameptr #1 >
  229.     { namesleft #1 >
  230.         { ", " * t * }
  231.         { numnames #2 >
  232.         { "," * }
  233.         'skip$
  234.           if$
  235.           t "~others" =
  236.         { " et~al." * }
  237.         { " and " * t * }
  238.           if$
  239.         }
  240.       if$
  241.     }
  242.     't
  243.       if$
  244.       nameptr #1 + 'nameptr :=
  245.       namesleft #1 - 'namesleft :=
  246.     }
  247.   while$
  248. }
  249.  
  250. FUNCTION {format.authors}
  251. { author empty$
  252.     { "" }
  253.     { author format.names}
  254.   if$
  255. }
  256.  
  257. FUNCTION {format.editors}
  258. { editor empty$
  259.     { "" }
  260.     { editor format.names
  261.       editor num.names$ #1 >
  262.     { ", eds. " * }
  263.     { ", ed. " * }
  264.       if$
  265.     }
  266.   if$
  267. }
  268.  
  269. FUNCTION {format.title}
  270. { title empty$
  271.     { "" }
  272.     { title "t" change.case$ }
  273.   if$
  274. }
  275.  
  276. FUNCTION {n.dashify}
  277. { 't :=
  278.   ""
  279.     { t empty$ not }
  280.     { t #1 #1 substring$ "-" =
  281.     { t #1 #2 substring$ "--" = not
  282.         { "--" *
  283.           t #2 global.max$ substring$ 't :=
  284.         }
  285.         {   { t #1 #1 substring$ "-" = }
  286.         { "-" *
  287.           t #2 global.max$ substring$ 't :=
  288.         }
  289.           while$
  290.         }
  291.       if$
  292.     }
  293.     { t #1 #1 substring$ *
  294.       t #2 global.max$ substring$ 't :=
  295.     }
  296.       if$
  297.     }
  298.   while$
  299. }
  300.  
  301. FUNCTION {format.date}
  302. { year empty$
  303.     { month empty$
  304.     { "" }
  305.     { "there's a month but no year in " cite$ * warning$
  306.       month
  307.     }
  308.       if$
  309.     }
  310.     { month empty$
  311.     'year
  312.     { month " " * year * }
  313.       if$
  314.     }
  315.   if$
  316. }
  317.  
  318. FUNCTION {colen.date}
  319. { year empty$
  320.     { month empty$
  321.     { "" }
  322.     { "there's a month but no year in " cite$ * warning$
  323.       month
  324.     }
  325.       if$
  326.     }
  327.     { year ":" * }
  328.   if$
  329. }
  330.  
  331.  
  332.  
  333. FUNCTION {format.btitle}
  334. { title emphasize
  335. }
  336.  
  337. FUNCTION {tie.or.space.connect}
  338. { duplicate$ text.length$ #3 <
  339.     { "~" }
  340.     { " " }
  341.   if$
  342.   swap$ * *
  343. }
  344.  
  345. FUNCTION {either.or.check}
  346. { empty$
  347.     'pop$
  348.     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  349.   if$
  350. }
  351.  
  352. FUNCTION {format.bvolume}
  353. { volume empty$
  354.     { "" }
  355.     { "Volume" volume tie.or.space.connect
  356.       series empty$
  357.     'skip$
  358.     { " of " * series emphasize * }
  359.       if$
  360.       "volume and number" number either.or.check
  361.     }
  362.   if$
  363. }
  364.  
  365. FUNCTION {format.address}
  366. { address empty$
  367.    'skip$
  368.     {address ":" *}
  369.     if$
  370. }
  371.  
  372. FUNCTION {format.number.series}
  373. { volume empty$
  374.     { number empty$
  375.     { series field.or.null }
  376.     { output.state mid.sentence =
  377.         { "number" }
  378.         { "Number" }
  379.       if$
  380.       number tie.or.space.connect
  381.       series empty$
  382.         { "there's a number but no series in " cite$ * warning$ }
  383.         { " in " * series * }
  384.       if$
  385.     }
  386.       if$
  387.     }
  388.     { "" }
  389.   if$
  390. }
  391.  
  392.  
  393. FUNCTION {format.edition}
  394. { edition empty$
  395.     { "" }
  396.     { output.state mid.sentence =
  397.     { edition "l" change.case$ " ed." * }
  398.     { edition "t" change.case$ " ed." * }
  399.       if$
  400.     }
  401.   if$
  402. }
  403.  
  404. INTEGERS { multiresult }
  405.  
  406. FUNCTION {multi.page.check}
  407. { 't :=
  408.   #0 'multiresult :=
  409.     { multiresult not
  410.       t empty$ not
  411.       and
  412.     }
  413.     { t #1 #1 substring$
  414.       duplicate$ "-" =
  415.       swap$ duplicate$ "," =
  416.       swap$ "+" =
  417.       or or
  418.     { #1 'multiresult := }
  419.     { t #2 global.max$ substring$ 't := }
  420.       if$
  421.     }
  422.   while$
  423.   multiresult
  424. }
  425.  
  426. FUNCTION {format.pages}
  427. { pages empty$
  428.     { "" }
  429.     { pages multi.page.check
  430.     { "" pages n.dashify tie.or.space.connect }
  431.     { "" pages tie.or.space.connect }
  432.       if$
  433.     }
  434.   if$
  435. }
  436.  
  437. FUNCTION {format.vol.num.pages}
  438. { volume field.or.null
  439.   pages empty$
  440.     'skip$
  441.     { duplicate$ empty$
  442.     { pop$ format.pages }
  443.     { ": " * pages n.dashify * }
  444.       if$
  445.     }
  446.   if$
  447. }
  448.  
  449.  
  450. FUNCTION {format.chapter.pages}
  451. { chapter empty$
  452.     'format.pages
  453.     { type empty$
  454.     { "Chapter" }
  455.     { type "l" change.case$ }
  456.       if$
  457.       chapter tie.or.space.connect
  458.       pages empty$
  459.     'skip$
  460.     { ", " * format.pages * }
  461.       if$
  462.     }
  463.   if$
  464. }
  465.  
  466. FUNCTION {format.in.ed.booktitle}
  467. { booktitle empty$
  468.     { "" }
  469.     { editor empty$
  470.     { "In: " booktitle emphasize * }
  471.     { "In: " format.editors * " " * booktitle emphasize * }
  472.       if$
  473.     }
  474.   if$
  475. }
  476.  
  477. FUNCTION {empty.misc.check}
  478. { author empty$ title empty$ howpublished empty$
  479.   month empty$ year empty$ note empty$
  480.   and and and and and
  481.   key empty$ not and
  482.     { "all relevant fields are empty in " cite$ * warning$ }
  483.     'skip$
  484.   if$
  485. }
  486.  
  487. FUNCTION {format.thesis.type}
  488. { type empty$
  489.     'skip$
  490.     { pop$
  491.       type "t" change.case$
  492.     }
  493.   if$
  494. }
  495.  
  496. FUNCTION {format.tr.number}
  497. { type empty$
  498.     { "Technical Report" }
  499.     'type
  500.   if$
  501.   number empty$
  502.     { "t" change.case$ }
  503.     { number tie.or.space.connect }
  504.   if$
  505. }
  506.  
  507. FUNCTION {format.article.crossref}
  508. { key empty$
  509.     { journal empty$
  510.     { "need key or journal for " cite$ * " to crossref " * crossref *
  511.       warning$
  512.       ""
  513.     }
  514.     { "In {\em " journal * "\/}" * }
  515.       if$
  516.     }
  517.     { "In " key * }
  518.   if$
  519.   " \cite{" * crossref * "}" *
  520. }
  521.  
  522. FUNCTION {format.crossref.editor}
  523. { editor #1 "{vv~}{ll}" format.name$
  524.   editor num.names$ duplicate$
  525.   #2 >
  526.     { pop$ " et~al." * }
  527.     { #2 <
  528.     'skip$
  529.     { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  530.         { " et~al." * }
  531.         { " and " * editor #2 "{vv~}{ll}" format.name$ * }
  532.       if$
  533.     }
  534.       if$
  535.     }
  536.   if$
  537. }
  538.  
  539. FUNCTION {format.book.crossref}
  540. { volume empty$
  541.     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
  542.       "In "
  543.     }
  544.     { "Volume" volume tie.or.space.connect
  545.       " of " *
  546.     }
  547.   if$
  548.   editor empty$
  549.   editor field.or.null author field.or.null =
  550.   or
  551.     { key empty$
  552.     { series empty$
  553.         { "need editor, key, or series for " cite$ * " to crossref " *
  554.           crossref * warning$
  555.           "" *
  556.         }
  557.         { "{\em " * series * "\/}" * }
  558.       if$
  559.     }
  560.     { key * }
  561.       if$
  562.     }
  563.     { format.crossref.editor * }
  564.   if$
  565.   " \cite{" * crossref * "}" *
  566. }
  567.  
  568. FUNCTION {format.incoll.inproc.crossref}
  569. { editor empty$
  570.   editor field.or.null author field.or.null =
  571.   or
  572.     { key empty$
  573.     { booktitle empty$
  574.         { "need editor, key, or booktitle for " cite$ * " to crossref " *
  575.           crossref * warning$
  576.           ""
  577.         }
  578.         { "In {\em " booktitle * "\/}" * }
  579.       if$
  580.     }
  581.     { "In " key * }
  582.       if$
  583.     }
  584.     { "In " format.crossref.editor * }
  585.   if$
  586.   " \cite{" * crossref * "}" *
  587. }
  588.  
  589. FUNCTION {article}
  590. { output.bibitem
  591.   format.authors "author" output.check
  592.   new.block
  593.   format.title "title" output.check
  594.   new.block
  595.   crossref missing$
  596.     { journal "journal" output.check
  597.       new.section
  598.       year "; " * "year" output.check
  599.       new.section
  600.       format.vol.num.pages output
  601.       }
  602.     { format.article.crossref output.nonnull
  603.       format.pages output
  604.     }
  605.   if$
  606.   new.block
  607.   note output
  608.   fin.entry
  609. }
  610.  
  611.  
  612. FUNCTION {book}
  613. { output.bibitem
  614.   author empty$
  615.     { format.editors "author and editor" output.check }
  616.     { format.authors output.nonnull
  617.       crossref missing$
  618.     { "author and editor" editor either.or.check }
  619.     'skip$
  620.       if$
  621.     }
  622.   if$
  623.   new.block
  624.   format.btitle "title" output.check
  625.   crossref missing$
  626.     { format.bvolume output
  627.       format.edition output
  628.       new.block
  629.       format.number.series output
  630.       format.address  "address" output.check
  631.       new.section
  632.       publisher "publisher" output.check
  633.     }
  634.     { new.block
  635.       format.book.crossref output.nonnull
  636.     }
  637.   if$
  638.   format.date "year" output.check
  639.   new.block
  640.   note output
  641.   fin.entry
  642. }
  643.  
  644. FUNCTION {booklet}
  645. { output.bibitem
  646.   format.authors output
  647.   new.block
  648.   format.title "title" output.check
  649.   howpublished address new.block.checkb
  650.   howpublished output
  651.   address output
  652.   format.date output
  653.   new.block
  654.   note output
  655.   fin.entry
  656. }
  657.  
  658. FUNCTION {inbook}
  659. { output.bibitem
  660.   author empty$
  661.     { format.editors "author and editor" output.check }
  662.     { format.authors output.nonnull
  663.       crossref missing$
  664.     { "author and editor" editor either.or.check }
  665.     'skip$
  666.       if$
  667.     }
  668.   if$
  669.   new.block
  670.   format.btitle "title" output.check
  671.   format.edition output
  672.   format.bvolume output
  673.       new.block
  674.       format.number.series output
  675.       new.sentence
  676.       format.address "address" output.check
  677.       new.section
  678.       publisher "publisher" output.check
  679.       colen.date "year" output.check
  680.       new.section
  681.       format.chapter.pages "chapter and pages" output.check
  682.   new.block
  683.   note output
  684.   fin.entry
  685. }
  686.  
  687. FUNCTION {incollection}
  688. { output.bibitem
  689.   format.authors "author" output.check
  690.   new.block
  691.   format.title "title" output.check
  692.   new.block
  693.   format.in.ed.booktitle "booktitle" output.check
  694.        new.sentence
  695.       format.edition output
  696.       format.bvolume output
  697.       format.number.series output
  698.       new.sentence
  699.       format.address "address" output.check
  700.       new.section
  701.       publisher "publisher" output.check
  702.       colen.date "year" output.check
  703.       new.section
  704.       format.chapter.pages output
  705.    new.block
  706.   note output
  707.   fin.entry
  708. }
  709.  
  710. FUNCTION {inproceedings}
  711. { output.bibitem
  712.   format.authors "author" output.check
  713.   new.block
  714.   format.title "title" output.check
  715.   new.block
  716.   format.in.ed.booktitle "booktitle" output.check
  717.   new.sentence
  718.   format.bvolume output
  719.   format.number.series output
  720.   format.address "address" output.check
  721.   new.section
  722.   publisher output
  723.   colen.date output
  724.   new.section
  725.   format.pages output
  726.   new.block
  727.   note output
  728.   fin.entry
  729. }
  730.  
  731. FUNCTION {conference} { inproceedings }
  732.  
  733. FUNCTION {manual}
  734. { output.bibitem
  735.   author empty$
  736.     { organization empty$
  737.     'skip$
  738.     { organization output.nonnull
  739.       address output
  740.     }
  741.       if$
  742.     }
  743.     { format.authors output.nonnull }
  744.   if$
  745.   new.block
  746.   format.btitle "title" output.check
  747.   format.edition output
  748.   author empty$
  749.     { organization empty$
  750.     { address new.block.checka
  751.       address output
  752.     }
  753.     'skip$
  754.       if$
  755.     }
  756.     { organization address new.block.checkb
  757.       organization output
  758.       address output
  759.     }
  760.   if$
  761.   format.date output
  762.   new.block
  763.   note output
  764.   fin.entry
  765. }
  766.  
  767. FUNCTION {mastersthesis}
  768. { output.bibitem
  769.   format.authors "author" output.check
  770.   new.block
  771.   format.title "title" output.check
  772.   new.block
  773.   "Master's thesis" format.thesis.type output.nonnull
  774.   organization "organization" output.check
  775.   school "school" output.check
  776.   address "address" output.check
  777.   format.date "year" output.check
  778.   new.block
  779.   note output
  780.   fin.entry
  781. }
  782.  
  783. FUNCTION {misc}
  784. { output.bibitem
  785.   format.authors output
  786.   title howpublished new.block.checkb
  787.   format.title output
  788.   howpublished new.block.checka
  789.   howpublished output
  790.   format.date output
  791.   new.block
  792.   note output
  793.   fin.entry
  794.   empty.misc.check
  795. }
  796.  
  797. FUNCTION {phdthesis}
  798. { output.bibitem
  799.   format.authors "author" output.check
  800.   new.block
  801.   format.title "title" output.check
  802.   new.block
  803.   "PhD thesis" format.thesis.type output.nonnull
  804.   organization "organization" output.check
  805.   school "school" output.check
  806.   address "address" output.check
  807.   format.date "year" output.check
  808.   new.block
  809.   note output
  810.   fin.entry
  811. }
  812.  
  813. FUNCTION {proceedings}
  814. { output.bibitem
  815.   editor empty$
  816.     { organization output }
  817.     { format.editors output.nonnull }
  818.   if$
  819.   new.block
  820.   format.btitle "title" output.check
  821.   format.bvolume output
  822.   format.number.series output
  823.   address empty$
  824.     { editor empty$
  825.     { publisher new.sentence.checka }
  826.     { organization publisher new.sentence.checkb
  827.       organization output
  828.     }
  829.       if$
  830.       publisher output
  831.       format.date "year" output.check
  832.     }
  833.     { address output.nonnull
  834.       format.date "year" output.check
  835.       new.sentence
  836.       editor empty$
  837.     'skip$
  838.     { organization output }
  839.       if$
  840.       publisher output
  841.     }
  842.   if$
  843.   new.block
  844.   note output
  845.   fin.entry
  846. }
  847.  
  848. FUNCTION {techreport}
  849. { output.bibitem
  850.   format.authors "author" output.check
  851.   new.block
  852.   format.title "title" output.check
  853.   new.block
  854.   format.tr.number output.nonnull
  855.   organization "organization" output.check
  856.   institution "institution" output.check
  857.   format.address "address" output.check
  858.       new.section
  859.   format.date "year" output.check
  860.   new.block
  861.   note output
  862.   fin.entry
  863. }
  864.  
  865. FUNCTION {unpublished}
  866. { output.bibitem
  867.   format.authors "author" output.check
  868.   new.block
  869.   format.title "title" output.check
  870.   new.block
  871.   note "note" output.check
  872.   format.date output
  873.   fin.entry
  874. }
  875.  
  876. FUNCTION {default.type} { misc }
  877.  
  878. MACRO {jan} {"January"}
  879.  
  880. MACRO {feb} {"February"}
  881.  
  882. MACRO {mar} {"March"}
  883.  
  884. MACRO {apr} {"April"}
  885.  
  886. MACRO {may} {"May"}
  887.  
  888. MACRO {jun} {"June"}
  889.  
  890. MACRO {jul} {"July"}
  891.  
  892. MACRO {aug} {"August"}
  893.  
  894. MACRO {sep} {"September"}
  895.  
  896. MACRO {oct} {"October"}
  897.  
  898. MACRO {nov} {"November"}
  899.  
  900. MACRO {dec} {"December"}
  901.  
  902. MACRO {acmcs} {"ACM Computing Surveys"}
  903.  
  904. MACRO {acta} {"Acta Informatica"}
  905.  
  906. MACRO {cacm} {"Communications of the ACM"}
  907.  
  908. MACRO {ibmjrd} {"IBM Journal of Research and Development"}
  909.  
  910. MACRO {ibmsj} {"IBM Systems Journal"}
  911.  
  912. MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
  913.  
  914. MACRO {ieeetc} {"IEEE Transactions on Computers"}
  915.  
  916. MACRO {ieeetcad}
  917.  {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
  918.  
  919. MACRO {ipl} {"Information Processing Letters"}
  920.  
  921. MACRO {jacm} {"Journal of the ACM"}
  922.  
  923. MACRO {jcss} {"Journal of Computer and System Sciences"}
  924.  
  925. MACRO {scp} {"Science of Computer Programming"}
  926.  
  927. MACRO {sicomp} {"SIAM Journal on Computing"}
  928.  
  929. MACRO {tocs} {"ACM Transactions on Computer Systems"}
  930.  
  931. MACRO {tods} {"ACM Transactions on Database Systems"}
  932.  
  933. MACRO {tog} {"ACM Transactions on Graphics"}
  934.  
  935. MACRO {toms} {"ACM Transactions on Mathematical Software"}
  936.  
  937. MACRO {toois} {"ACM Transactions on Office Information Systems"}
  938.  
  939. MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
  940.  
  941. MACRO {tcs} {"Theoretical Computer Science"}
  942.  
  943. READ
  944.  
  945. FUNCTION {sortify}
  946. { purify$
  947.   "l" change.case$
  948. }
  949.  
  950. INTEGERS { len }
  951.  
  952. FUNCTION {chop.word}
  953. { 's :=
  954.   'len :=
  955.   s #1 len substring$ =
  956.     { s len #1 + global.max$ substring$ }
  957.     's
  958.   if$
  959. }
  960.  
  961. FUNCTION {sort.format.names}
  962. { 's :=
  963.   #1 'nameptr :=
  964.   ""
  965.   s num.names$ 'numnames :=
  966.   numnames 'namesleft :=
  967.     { namesleft #0 > }
  968.     { nameptr #1 >
  969.     { "   " * }
  970.     'skip$
  971.       if$
  972.       s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
  973.       nameptr numnames = t "others" = and
  974.     { "et al" * }
  975.     { t sortify * }
  976.       if$
  977.       nameptr #1 + 'nameptr :=
  978.       namesleft #1 - 'namesleft :=
  979.     }
  980.   while$
  981. }
  982.  
  983. FUNCTION {sort.format.title}
  984. { 't :=
  985.   "A " #2
  986.     "An " #3
  987.       "The " #4 t chop.word
  988.     chop.word
  989.   chop.word
  990.   sortify
  991.   #1 global.max$ substring$
  992. }
  993.  
  994. FUNCTION {author.sort}
  995. { author empty$
  996.     { key empty$
  997.     { "to sort, need author or key in " cite$ * warning$
  998.       ""
  999.     }
  1000.     { key sortify }
  1001.       if$
  1002.     }
  1003.     { author sort.format.names }
  1004.   if$
  1005. }
  1006.  
  1007. FUNCTION {author.editor.sort}
  1008. { author empty$
  1009.     { editor empty$
  1010.     { key empty$
  1011.         { "to sort, need author, editor, or key in " cite$ * warning$
  1012.           ""
  1013.         }
  1014.         { key sortify }
  1015.       if$
  1016.     }
  1017.     { editor sort.format.names }
  1018.       if$
  1019.     }
  1020.     { author sort.format.names }
  1021.   if$
  1022. }
  1023.  
  1024. FUNCTION {author.organization.sort}
  1025. { author empty$
  1026.     { organization empty$
  1027.     { key empty$
  1028.         { "to sort, need author, organization, or key in " cite$ * warning$
  1029.           ""
  1030.         }
  1031.         { key sortify }
  1032.       if$
  1033.     }
  1034.     { "The " #4 organization chop.word sortify }
  1035.       if$
  1036.     }
  1037.     { author sort.format.names }
  1038.   if$
  1039. }
  1040.  
  1041. FUNCTION {editor.organization.sort}
  1042. { editor empty$
  1043.     { organization empty$
  1044.     { key empty$
  1045.         { "to sort, need editor, organization, or key in " cite$ * warning$
  1046.           ""
  1047.         }
  1048.         { key sortify }
  1049.       if$
  1050.     }
  1051.     { "The " #4 organization chop.word sortify }
  1052.       if$
  1053.     }
  1054.     { editor sort.format.names }
  1055.   if$
  1056. }
  1057.  
  1058. FUNCTION {presort}
  1059. { type$ "book" =
  1060.   type$ "inbook" =
  1061.   or
  1062.     'author.editor.sort
  1063.     { type$ "proceedings" =
  1064.     'editor.organization.sort
  1065.     { type$ "manual" =
  1066.         'author.organization.sort
  1067.         'author.sort
  1068.       if$
  1069.     }
  1070.       if$
  1071.     }
  1072.   if$
  1073.   "    "
  1074.   *
  1075.   year field.or.null sortify
  1076.   *
  1077.   "    "
  1078.   *
  1079.   title field.or.null
  1080.   sort.format.title
  1081.   *
  1082.   #1 entry.max$ substring$
  1083.   'sort.key$ :=
  1084. }
  1085.  
  1086. ITERATE {presort}
  1087.  
  1088. SORT
  1089.  
  1090. STRINGS { longest.label }
  1091.  
  1092. INTEGERS { number.label longest.label.width }
  1093.  
  1094. FUNCTION {initialize.longest.label}
  1095. { "" 'longest.label :=
  1096.   #1 'number.label :=
  1097.   #0 'longest.label.width :=
  1098. }
  1099.  
  1100. FUNCTION {longest.label.pass}
  1101. { number.label int.to.str$ 'label :=
  1102.   number.label #1 + 'number.label :=
  1103.   label width$ longest.label.width >
  1104.     { label 'longest.label :=
  1105.       label width$ 'longest.label.width :=
  1106.     }
  1107.     'skip$
  1108.   if$
  1109. }
  1110.  
  1111. EXECUTE {initialize.longest.label}
  1112.  
  1113. ITERATE {longest.label.pass}
  1114.  
  1115. FUNCTION {begin.bib}
  1116. { preamble$ empty$
  1117.     'skip$
  1118.     { preamble$ write$ newline$ }
  1119.   if$
  1120.   "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
  1121. }
  1122.  
  1123. EXECUTE {begin.bib}
  1124.  
  1125. EXECUTE {init.state.consts}
  1126.  
  1127. ITERATE {call.type$}
  1128.  
  1129. FUNCTION {end.bib}
  1130. { newline$
  1131.   "\end{thebibliography}" write$ newline$
  1132. }
  1133.  
  1134. EXECUTE {end.bib}
  1135.